package com.tjetc._7homework;

import lombok.*;

import java.util.Arrays;
import java.util.Comparator;

public class _2HomeWork {
    public static void main(String[] args) {
        /*

            (1)做一个Student类，Student类有名称(name),性别(sex),年龄(age),学号(stu_id),做合理封装，通过构造器在创建对象时将4个属性赋值。
            (2)写一个Teacher类，Teacher类有名称(name),性别(sex),年龄(age),工龄(work_age),做合理封装，通过构造器在创建对象时将4个属性赋值。
            (3)抽取一个父类Person类，将共同属性和方法放到Person类
            (4)学生需要有学习的方法(study),在方法里写生“我承诺，我会好好学习。”。
            (5)教师需要有教学的方法(teach),在方法里写上“我承诺，我会认真教学。”。
            (6)学生和教师都有玩的方法(play),学生玩的是足球，老师玩的是象棋，此方法是返回字符串的，分别返回“xx爱玩足球”和“xx爱玩象棋”(其中xx分别代表学生和老师的姓名)。
                因为玩的方法名称都一样，所以要求此方法定义在父类中，子类实现重写。
                应当分析出，我们需要打印信息的方法，printlnfo()
            (7)定义多态数组，里面保存2个学生和2个教师，要求按年龄从高到低排序
         */

        Person teacher = new Teacher("zhangsan", "男", 37, 10);
        Person student = new Student("lisi", "女", 18, 2025);
        teacher.printlnfo();
        student.printlnfo();

        Person[] persons = new Person[4];
        Person teacher1 = new Teacher("wangwu", "男", 32, 10);
        Person student1 = new Student("zhaoliu", "女", 16, 2025);
        persons[0] = teacher;
        persons[1] = teacher1;
        persons[2] = student;
        persons[3] = student1;

        Arrays.sort(persons, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o2.getAge() - o1.getAge();
            }
        });

        System.out.println(Arrays.toString(persons));

    }
}

@Getter
@Setter
class Student extends Person {
    private int stuId;

    public Student() {
    }

    @Override
    String play() {
        return getName() + "爱玩足球";
    }

    @Override
    public void printlnfo() {
    /*
            学生的信息：
            姓名：小明年龄：15
            性别：男
            学号：00023102
            我承诺，我会好好学习。
            小明爱玩足球。

         */
        System.out.println("学生的信息：");
        // 姓名年龄性别
        super.printlnfo();
        System.out.println("学号：" + stuId);
        study();
        System.out.println(play());

    }

    public Student(String name, String sex, int age, int stuId) {
        super(name, sex, age);
        this.stuId = stuId;
    }

    public void study() {
        System.out.println("我承诺，我会好好学习。");
    }

    @Override
    public String toString() {
        return super.toString() + "Student{" +
                "stuId=" + stuId +
                '}';
    }
}

@Getter
@Setter
class Teacher extends Person {
    private int workAge;

    public Teacher() {
    }

    public Teacher(String name, String sex, int age, int workAge) {
        super(name, sex, age);
        this.workAge = workAge;
    }

    public void teach() {
        System.out.println("我承诺，我会认真教学。");
    }

    @Override
    String play() {
        return getName() + "爱玩象棋";
    }

     /*
            老师的信息：
            姓名：张飞
            年龄：30
            性别：男
            工龄：5
            我承诺，我会认真教课。
            张飞爱玩象棋

         */

    @Override
    public void printlnfo() {
        System.out.println("老师的信息: ");
        super.printlnfo();
        System.out.println("工龄：" + workAge);
        teach();
        System.out.println(play());
    }

    @Override
    public String toString() {
        return super.toString() + "Teacher{" +
                "workAge=" + workAge +
                '}';
    }
}

@Getter
@Setter
abstract class Person {
    private String name;
    private String sex;
    private int age;

    public Person() {
    }

    public Person(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    abstract String play();

    public void printlnfo() {
        /*
            姓名：张飞
            年龄：30
            性别：男
         */
        System.out.println("姓名：" + name);
        System.out.println("年龄：" + age);
        System.out.println("性别：" + sex);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}


